﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WindowsFormApplication.FormBase;
using WindowsFormsView;
using WindowsFormsModel.BusinessObjects;
using WindowsFormsPresenter.RestaurantTable;
using WindowsFormsPresenter.RestaurantArea;

namespace WindowsFormApplication.FormCategory
{
    public partial class frmRestaurantTableDetail : frmBaseCategoryDetail, IRestaurantAreasView, IRestaurantTableView
    {
        private RestaurantAreasPresenter _restaurantAreasPresenter;
        private RestaurantTablePresenter _restaurantTablePresenter;

        public IList<RestaurantAreaModel> RestaurantAreas
        {
            set
            {
                var restaurantAreas = value;

                cboRestaurantAreaID.DataSource = restaurantAreas;
                cboRestaurantAreaID.DisplayMember = "RestaurantAreaName";
                cboRestaurantAreaID.ValueMember = "RestaurantAreaID";

                for (int i = 0; i < cboRestaurantAreaID.DisplayLayout.Bands[0].Columns.Count; i++)
                {
                    cboRestaurantAreaID.DisplayLayout.Bands[0].Columns[i].Hidden = true;
                }

                cboRestaurantAreaID.DisplayLayout.Bands[0].Columns["RestaurantAreaCode"].Hidden = false;
                cboRestaurantAreaID.DisplayLayout.Bands[0].Columns["RestaurantAreaName"].Hidden = false;

                cboRestaurantAreaID.DisplayLayout.Bands[0].Columns["RestaurantAreaCode"].Header.Caption = "Mã khu vực nhà hàng";
                cboRestaurantAreaID.DisplayLayout.Bands[0].Columns["RestaurantAreaName"].Header.Caption = "Tên khu vực nhà hàng";
                if (restaurantAreas.Count > 0)
                    cboRestaurantAreaID.Rows[0].Selected = true;
            }
        }

        public string RestaurantTableID { get; set; }

        public string RestaurantID { get; set; }

        public string RestaurantAreaID
        {
            get
            {
                if (cboRestaurantAreaID.Value != null)
                {
                    return cboRestaurantAreaID.Value.ToString();
                }
                else { return null; }
            }
            set { cboRestaurantAreaID.Value = value; }
        }

        public string RestaurantTableCode
        {
            get { return txtRestaurantTableCode.Text; }
            set { txtRestaurantTableCode.Text = value; }
        }

        public string RestaurantTableName
        {
            get { return txtRestaurantTableName.Text; }
            set { txtRestaurantTableName.Text = value; }
        }

        public string Description
        {
            get { return txtDescription.Text; }
            set { txtDescription.Text = value; }
        }

        public int MaxPeople
        {
            get { return int.Parse(neMaxPeople.Value.ToString()); }
            set { neMaxPeople.Value = value; }
        }

        public bool IsOrder
        {
            get { return chkIsOrder.Checked; }
            set { chkIsOrder.CheckedValue = value; }
        }

        public bool IsOrderOnline
        {
            get { return chkIsOrderOnline.Checked; }
            set { chkIsOrderOnline.CheckedValue = value; }
        }

        public bool IsActive
        {
            get { return chkIsActive.Checked; }
            set { chkIsActive.CheckedValue = value; }
        }

        protected override void InitData()
        {
            _restaurantAreasPresenter.DisplayActiveByBranch();

            if (KeyValue != null)
                _restaurantTablePresenter.Display(KeyValue);
        }

        protected override bool ValidData()
        {
            if (string.IsNullOrEmpty(RestaurantTableCode))
            {
                ShowMessageBox("Bạn chưa nhập mã bàn ăn !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtRestaurantTableCode.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(RestaurantTableName))
            {
                ShowMessageBox("Bạn chưa nhập tên bàn ăn !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtRestaurantTableName.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(RestaurantAreaID))
            {
                ShowMessageBox("Bạn chưa nhập khu vực bàn tương ứng !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cboRestaurantAreaID.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(neMaxPeople.Value.ToString()))
            {
                ShowMessageBox("Bạn chưa nhập số lượng người tối đa trong bàn ăn !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cboRestaurantAreaID.Focus();
                return false;
            }
            if (int.Parse(neMaxPeople.Value.ToString()) < 1)
            {
                ShowMessageBox("Số lượng người trong bàn ăn phải lớn hơn 1 !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cboRestaurantAreaID.Focus();
                return false;
            }
            return true;
        }

        protected override bool SaveData()
        {
            try
            {
                _restaurantTablePresenter.Save();
                if (eActionMode == ActionMode.AddNew)
                    ShowMessageBox("Thêm mới dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                    ShowMessageBox("Sửa dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (ApplicationException ex)
            {
                ShowMessageBox(ex.Message, "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        public frmRestaurantTableDetail()
        {
            InitializeComponent();

            _restaurantAreasPresenter = new RestaurantAreasPresenter(this);
            _restaurantTablePresenter = new RestaurantTablePresenter(this);
        }
    }
}
